const logInfo = require("../../util/logInfo");
const logStep = require("../../util/logStep");

module.exports = class PluginAPI {
  constructor(id, service) {
    this.id = id;
    this.service = service;
    logStep("PluginAPI 主要是提供 Service 对外的API给 plugin使用");
    logInfo(
      "将一些必要的操作和数据再次封装后提供出去,有助于解耦，避免滥用，同时也保存有一些相对于插件的级别的state"
    );
    logInfo(
      "registerCommand 是比较关键的方法，plugin 通过这个方法向 service 中注册自己的命令"
    );
  }

  /**注册插件 */
  registerCommand(name, opts, fn) {
    if (typeof opts === "function") {
      fn = opts;
      opts = null;
    }
    this.service.commands[name] = { fn, opts: opts || {} };
  }

  // 提供给plugin，用于 注入webpack配置
  chainWebpack (fn) {
    this.service.webpackChainFns.push(fn)
  }

  // 提供给plugin，用于 注入webpack配置
  configureWebpack (fn) {
    this.service.webpackRawConfigFns.push(fn)
  }
  // 提供给plugin，用于添加devService配置
  configureDevServer (fn) {
    this.service.devServerConfigFns.push(fn)
  }
};
